package hwOne3;

import edu.princeton.cs.algs4.StdOut;

import java.util.Objects;

public class LinkedListFind {
    // 定义链表节点（没有构造方法）
    private static class Node {
        String item;  // 节点存储的值
        Node next;    // 指向下一个节点的指针
    }

    private Node head; // 链表的头节点

    // 添加一个元素到链表的头部
    public void addFirst(String item) {
        Node newNode = new Node();  // 创建新节点
        newNode.item = item;        // 手动设置节点的值
        newNode.next = head;        // 新节点指向当前头节点
        head = newNode;             // 更新头节点为新节点
    }

    // 查找链表中是否包含某个元素
    public boolean find(String key) {
        Node current = head;            // 从头节点开始遍历
        while (current != null) {
            if (current.item.equals(key)) {
                return true;            // 找到匹配的元素
            }
            current = current.next;     // 继续遍历下一个节点
        }
        return false;                   // 遍历完成仍未找到
    }

    public void removeAfter(Node target) {
        Node current = head;            // 从头节点开始遍历
        while (current != null) {
            if (Objects.equals(current.item, target.item)) {
                current.next = null;
            }
            current = current.next;     // 继续遍历下一个节点
        }
    }

    // 打印链表中的所有元素
    public void printList() {
        Node current = head;
        while (current != null) {
            System.out.print(current.item + " -> ");
            current = current.next;
        }
        System.out.println("null");
    }

    // 测试代码
    public static void main(String[] args) {
        LinkedListFind list = new LinkedListFind();
        list.addFirst("C");  // 添加元素到头部
        list.addFirst("B");
        list.addFirst("A");

        list.printList();                // 输出：A -> B -> C -> null
        Node target = new Node();  // 创建新节点
        target.item = "B";
        list.removeAfter(target);
        StdOut.println("移除B后的节点");
        list.printList();
    }
}